package edu.pe.cayetano.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import org.apache.commons.beanutils.DynaBean;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.framework.Configuration;
import edu.pe.cayetano.framework.DAOException;
import edu.pe.cayetano.model.to.CitaTO;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.util.UtilTime;
import edu.pe.cayetano.util.Utilitario;

public class CitaDAO extends BaseDAO{

	public CitaDAO(Connection cnx) {
		super(cnx);
		System.out.println("entre al con conexion:<"+cnx+">");
	}

	public ArrayList getCitasxDia(String dia,DynaBean dyna) throws Exception {

		String 					schema				= Configuration.getSchemaDB();
		CitaTO				citaTO			 	= null;
		PreparedStatement   	pstmt 		 		= null;
		ResultSet 				rs 			 		= null;
		BResult					ret					= new BResult();
		ArrayList				lista				= new ArrayList();
		try{


			System.out.println("especialidad:<"+Utilitario.getPropertyDynaBean(dyna,"cboEspecialidad")+">");
			System.out.println("sillon:<"+Utilitario.getPropertyDynaBean(dyna,"cboSillon")+">");


			StringBuffer query  = new StringBuffer();
			query.append(" SELECT");
			query.append(" CT.CITA_ID,SP.NOMBRE AS ESPECIALIDAD, HA.COD_HORARIO,PAC.NOMBRE_COMPLETO AS PACIENTE,ST.ESTADO_ID");
			query.append(" FROM "+schema+"CITA CT INNER JOIN "+schema+"ESTADO ES ON CT.ESTADO_ID=ES.ESTADO_ID");
			query.append(" INNER JOIN "+schema+" HORARIO_ATENCION HA ON HA.COD_HORARIO=CT.COD_HORARIO");
			query.append(" INNER JOIN "+schema+"SILLON_DENTAL SD ON SD.SILLON_ID=CT.SILLON_ID INNER JOIN "+schema+"ESPECIALIDAD SP ON SP.ESPECIALIDAD_ID=SD.ESPECIALIDAD_ID");
			query.append(" INNER JOIN "+schema+"DETALLE_PLAN_TRATAMIENTO DPT ON DPT.CODIGO_DETPLANTRAT=CT.CODIGO_DETPLANTRAT ");
			query.append(" INNER JOIN "+schema+"PLAN_TRATAMIENTO PT ON PT.PLANTRA_CODIGO=DPT.PLANTRA_CODIGO INNER JOIN "+schema+"HISTORIA_CLINICA_DETALLE HCD ");
			query.append(" ON HCD.FILEHC=PT.FILEHC INNER JOIN "+schema+"HISTORIA_CLINICA HC ON HC.NROHC=HCD.NROHC INNER JOIN "+schema+"V_PACIENTE PAC");
			query.append(" ON PAC.PACIENTE_ID=HC.PACIENTE_ID");
			query.append(" INNER JOIN ESTADO ST ON ST.ESTADO_ID=CT.ESTADO_ID");
			query.append(" WHERE FECHA_SOLICITADA=?");
			query.append(" AND SP.ESPECIALIDAD_ID=? AND SD.SILLON_ID=?");
			System.out.println("query dia:"+dia);
			System.out.println("query getCitasxDia:"+query.toString());
			pstmt = getConnection().prepareStatement(query.toString());
			if(dia.equalsIgnoreCase("2012-11-31"))
				dia="2012-12-01";
			pstmt.setString(1,dia);
			pstmt.setString(2,Utilitario.getPropertyDynaBean(dyna,"cboEspecialidad"));
			pstmt.setString(3,Utilitario.getPropertyDynaBean(dyna,"cboSillon"));
			rs=pstmt.executeQuery();
			while(rs.next()){
				citaTO=new CitaTO();
				citaTO.setCodigoCita(rs.getString(1));
				citaTO.setEspecialidad(rs.getString(2));
				citaTO.setCodigo(rs.getInt(3));
				citaTO.setPaciente(rs.getString(4));
				citaTO.setEstado_id(rs.getString(5));
				lista.add(citaTO);
			}
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(ConstantesSECCD.ERROR_RET);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
				rs.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());
			}
		}
		return lista;
	}

	public int obtieneCantidadRegistrosxYear() throws Exception{

		PreparedStatement   		pstmt 		 		= null;
		ResultSet 					rs 			 		= null;
		int							cantidad			= 0;
		try{
				StringBuffer query  = new StringBuffer();
				query.append(" SELECT COUNT(*) FROM "+schema+"CITA WHERE YEAR(FECHA_REGISTRO)=YEAR(CURRENT_DATE)");
				System.out.println("CitaDAO::obtieneCantidadRegistrosxYear:<"+query.toString()+">");
				pstmt = getConnection().prepareStatement(query.toString());
				rs=pstmt.executeQuery();
				if(rs.next()){
					cantidad=rs.getInt(1);
				}}catch(Exception e){
				throw new DAOException(e.getMessage());
			}finally{
				try{
					try{pstmt.close();}catch(Exception e){}
					try{rs.close();}catch(Exception e){}
				}catch(Exception e1){}
			}
		return cantidad;
	}


	public BResult insertaCita(DynaBean dyna,String codigoCita) throws Exception {
		String 					schema			= Configuration.getSchemaDB();
		BResult					ret				= null;
		PreparedStatement		pstmt 		 	= null;
		try{
			StringBuffer query  = new StringBuffer();
			query.append(" INSERT INTO "+schema+"CITA VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)");
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,codigoCita);//cita_id
			pstmt.setString(2,Utilitario.getPropertyDynaBean(dyna,"cboServicio"));//det_plantratamiento cboServicio
			pstmt.setInt(3,1);//estado
			pstmt.setString(4,UtilTime.invierteFecha(Utilitario.getPropertyDynaBean(dyna,"fechaInicio")));//fecha_solicitada
			pstmt.setString(5,Utilitario.getPropertyDynaBean(dyna,"cboHorario"));//cod_horario
			pstmt.setString(6,"0");//codigo_meddoc
			pstmt.setString(7,"0");//codigo alumno titular
			pstmt.setString(8,"0");//codigo alumno suplente
			pstmt.setString(9,Utilitario.getPropertyDynaBean(dyna,"tmpSillon"));//sillon id
			pstmt.setString(10,"1"); // codigo usuario
			pstmt.setString(11,UtilTime.devuelveFechaActualYMD());//fecha_solicitada
			pstmt.setString(12,""); // codigo usuario
			pstmt.setString(13,""); // codigo usuario
			pstmt.executeUpdate();
			ret = new BResult();
			ret.setCode(0);
			ret.setMessage(ConstantesSECCD.EXITO);
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(ConstantesSECCD.ERROR_RET);
			System.out.println("cita::"+e.getMessage());
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());
			}
		}
		return ret;
	}

	public BResult verPopUpCita(String cita) throws Exception{
		CitaTO				citaTO			 	= null;
		PreparedStatement   	pstmt 		 		= null;
		ResultSet 				rs 			 		= null;
		BResult					ret					= new BResult();
		try{
				StringBuffer query  = new StringBuffer();
				query.append(" SELECT CT.CODIGO_DETPLANTRAT,FECHA_SOLICITADA,HA.HORA,SD.NOMBRE,SP.NOMBRE,");
				query.append(" NOMBRE_COMPLETO,SE.NOMBRE,SED.NOMBRE,DPT.PLANTRA_CODIGO,SE.SERVICIO_ID");
				query.append(" FROM "+schema+"CITA CT INNER JOIN "+schema+"DETALLE_PLAN_TRATAMIENTO DPT");
				query.append(" ON DPT.CODIGO_DETPLANTRAT=CT.CODIGO_DETPLANTRAT");
				query.append(" INNER JOIN "+schema+"PLAN_TRATAMIENTO PT ON PT.PLANTRA_CODIGO=DPT.PLANTRA_CODIGO");
				query.append(" INNER JOIN "+schema+"HISTORIA_CLINICA_DETALLE HCD ON HCD.FILEHC=PT.FILEHC");
				query.append(" INNER JOIN "+schema+"HISTORIA_CLINICA HC ON HC.NROHC=HCD.NROHC");
				query.append(" INNER JOIN "+schema+"V_PACIENTE PAC ON PAC.PACIENTE_ID=HC.PACIENTE_ID");
				query.append(" INNER JOIN "+schema+"SERVICIO SE ON DPT.SERVICIO_ID=SE.SERVICIO_ID");
				query.append(" INNER JOIN "+schema+"SILLON_DENTAL SD ON SD.SILLON_ID=CT.SILLON_ID");
				query.append(" INNER JOIN "+schema+"ESPECIALIDAD SP ON SP.ESPECIALIDAD_ID=SD.ESPECIALIDAD_ID");
				query.append(" INNER JOIN "+schema+"SEDE SED ON SED.SEDE_ID=SP.SEDE_ID");
				query.append(" INNER JOIN "+schema+"HORARIO_ATENCION HA ON HA.COD_HORARIO=CT.COD_HORARIO");
				query.append(" WHERE CT.CITA_ID=?");
				pstmt = getConnection().prepareStatement(query.toString());
				pstmt.setString(1,cita);
				rs=pstmt.executeQuery();
				if(rs.next()){
					citaTO=new CitaTO();
					citaTO.setCodigoDetPlanTrat(rs.getString(1));
					citaTO.setFechaSolicitada(rs.getString(2));
					citaTO.setCodigoHorario(rs.getString(3));
					citaTO.setSillon(rs.getString(4));
					citaTO.setEspecialidad(rs.getString(5));
					citaTO.setPaciente(rs.getString(6));
					citaTO.setServicio(rs.getString(7));
					citaTO.setSede(rs.getString(8));
					citaTO.setCodigoPlanTrat(rs.getString(9));
					citaTO.setCodigoServicio(rs.getInt(10));
					ret.setObject(citaTO);
					ret.setCode(0);
				}
			}catch(Exception e){
				ret.setCode(ConstantesSECCD.EXITO_RET);
				throw new DAOException(e.getMessage());
			}finally{
				try{
					try{pstmt.close();}catch(Exception e){}
					try{rs.close();}catch(Exception e){}
				}catch(Exception e1){}
			}
		return ret;
	}

}
